Use case: Configure EXTI line to specific GPIO pin ¶
Sequence diagram ¶
Code snippet ¶
|
HAL1 |
HAL2 |
|---|---|
GPIO_Init_TypeDef GPIO_InitStructure;
EXTI_HandleTypeDef EXTI_HandleStructure;
GPIO_InitStructure.Mode = GPIO_MODE_IT_FALLING;
GPIO_InitStructure.Pull = GPIO_NOPULL;
GPIO_InitStructure.Pin = GPIO_PIN_YY;
HAL_GPIO_Init(GPIOx, &GPIO_InitStructure);
HAL_EXTI_GetHandle(&EXTI_HandleStructure, $EXTI_LINE_NUMBER$);
HAL_EXTI_RegisterCallback(&EXTI_HandleStructure,
HAL_EXTI_FALLING_CB_ID,
GPIOx_Exti_FallingCb);
HAL_NVIC_SetPriority(EXTI$EXTI_LINE_NUMBER$_IRQn, 2, 0);
HAL_NVIC_EnableIRQ(EXTI$EXTI_LINE_NUMBER$_IRQn);
static void GPIOx_Exti_FallingCb(void)
{
(...)
}
|
hal_gpio_config_t GPIO_ConfigStructure;
hal_exti_handle_t hexti;
hal_exti_config_t EXTI_ConfigStructure;
GPIO_ConfigStructure.mode = HAL_GPIO_MODE_INPUT;
GPIO_ConfigStructure.pull = HAL_GPIO_PULL_NO;
HAL_GPIO_Init(HAL_GPIOx, HAL_GPIO_PIN_YY, &GPIO_ConfigStructure);
HAL_EXTI_Init(&hexti, HAL_EXTI_GPIO_YY);
EXTI_ConfigStructure.trigger = HAL_EXTI_TRIGGER_FALLING;
EXTI_ConfigStructure.gpio_port = HAL_EXTI_GPIOX;
HAL_EXTI_SetConfig(&hexti, &EXTI_ConfigStructure);
HAL_EXTI_RegisterTriggerCallback(&hexti, GPIOx_Exti_FallingCb);
HAL_NVIC_SetPriority(EXTI$EXTI_LINE_NUMBER$_IRQn, 2, 0);
HAL_NVIC_EnableIRQ(EXTI$EXTI_LINE_NUMBER$_IRQn);
HAL_EXTI_Enable(&hexti, HAL_EXTI_MODE_INTERRUPT);
static void GPIOx_Exti_FallingCb(void)
{
(...)
}
|
Key changes ¶
HAL2 uses an explicit EXTI handle init + config sequence (
HAL_EXTI_Init/HAL_EXTI_SetConfig) instead of retrieving a handle viaHAL_EXTI_GetHandle.Callback registration differs: HAL2 registers a trigger callback through the EXTI handle.
EXTI start/enable is explicit in HAL2 (enable interrupt mode after configuration).

